// 引入 axios 库
import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
// 创建 axios 实例
const service = axios.create({
  // process.env 是脚手架工具获取环境变量的属性
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  timeout: 5000 // request timeout
})

// 请求拦截
service.interceptors.request.use(config => {
  if (store.getters.token) {
    // 往请求头注入token
    config.headers.Authorization = ` Bearer ${store.getters.token}`
  }
})
// 响应拦截器 统一处理错误
// 响应拦截器, 可以接受两个回调, 第一个会拦截到网络成功
// 第二个拦截到的是网络失败
service.interceptors.response.use(res => {
  // 成功返回数据
  if (res.data.success) {
    // 请求成功数据也没问题, 返回最终的结果
    return res.data.data
  } else {
    // 网络请求没问题, 响应 200 但是后端说 数据层面出了问题
    // 提示用户
    Message.error(res.data.message)
    // 阻止当前请求
  }
}, err => {
  // 网络请求完全失败, 如写错 url, 或者断网, 或者服务器崩溃

  // 提示用户
  // 阻止当前请求
  console.dir(err)
  Message.error(err.message)
})

// 导出实例
export default service
